home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / msdos / 3dflt86 / 3dflt86.asm next >
Assembly Source File  |  1991-10-18  |  19KB  |  1,293 lines

  1.     INCLUDE    YAM3D86.LIB
  2.     ASSUME    DS:DATA,CS:CODE
  3. LINEXE    MACRO    X0,Y0,X1,Y1
  4.     MOV    AX,X0
  5.     MOV    BX,Y0
  6.     MOV    CX,X1
  7.     MOV    DX,Y1
  8.     $LINE
  9.     ENDM
  10. BOX    MACRO    X0,Y0,X1,Y1
  11.     LINEXE    X0,Y0,X1,Y0
  12.     LINEXE    X0,Y0,X0,Y1
  13.     LINEXE    X1,Y0,X1,Y1
  14.     LINEXE    X0,Y1,X1,Y1
  15.     ENDM
  16. ;
  17. ;**ABOUT CONDITION CODE
  18. ;
  19. TAKEOFF    EQU    0000000000000001B
  20. LANDING    EQU    0000000000000010B
  21. ABOUT    EQU    1000000000000000B
  22. BADPICH    EQU    0100000000000000B
  23. LOWSPD    EQU    0010000000000000B
  24. HISPD    EQU    0001000000000000B
  25. COUT    EQU    0000100000000000B
  26. ;
  27. ;
  28. ;
  29. DSPD    EQU    2
  30. DPOW    EQU    1
  31. TOSPD    EQU    60
  32. TDSPD    EQU    30
  33. LBOUND    EQU    5
  34. LOWEST    EQU    3
  35. HIGHEST    EQU    2000
  36. SLOWEST    EQU    20
  37. FASTEST    EQU    118
  38. DWNSPD    EQU    35
  39. RADSPC    EQU    15
  40. ELVSPC    EQU    2
  41. AILSPC    EQU    3
  42. PORTX0    EQU    -15
  43. PORTZ0    EQU    -750
  44. PORTX1    EQU    15
  45. PORTZ1    EQU    750
  46. ;
  47. SCRNX0    EQU    150
  48. SCRNY0    EQU    10
  49. SCRNX1    EQU    489
  50. SCRNY1    EQU    SCRNY0+250
  51. CENTX    EQU    (SCRNX0+SCRNX1)/2
  52. CENTY    EQU    (SCRNY0+SCRNY1)/2
  53. ;
  54. RDX0    EQU    90
  55. RDY0    EQU    SCRNY1+5
  56. RDX1    EQU    RDX0+120
  57. RDY1    EQU    RDY0+120
  58. ;
  59. POWMAX    EQU    59
  60. POWX0    EQU    RDX1+10
  61. POWY0    EQU    RDY0
  62. POWX1    EQU    POWX0+20
  63. POWY1    EQU    POWY0+(POWMAX*2)+2
  64. ;
  65. POSTX0    EQU    429
  66. POSTY0    EQU    RDY0
  67. POSTX1    EQU    POSTX0+120
  68. POSTY1    EQU    POSTY0+120
  69. POSTCX    EQU    (POSTX0+POSTX1)/2
  70. POSTCY    EQU    (POSTY0+POSTY1)/2
  71. ;
  72. HIGHTX    EQU    RDX0+25
  73. HIGHTY0    EQU    SCRNY0
  74. HIGHTY1    EQU    SCRNY1
  75. HIGHTST    EQU    5
  76. ;
  77. ILSH_X    EQU    CENTX
  78. ILSH_Y    EQU    SCRNY1+20
  79. ;
  80. DIRCX    EQU    CENTX
  81. DIRCY    EQU    ILSH_Y+70
  82. DIRR    EQU    40
  83. ;
  84. SPDMAX    EQU    FASTEST
  85. SPDX0    EQU    POSTX0-30
  86. SPDY0    EQU    POSTY0
  87. SPDX1    EQU    SPDX0+20
  88. SPDY1    EQU    SPDY0+SPDMAX+2
  89. ;
  90. DATA    SEGMENT    PUBLIC
  91.     INCLUDE    EARTH.ASM
  92. PROGRAM    DB    "1990 山川 総司作"
  93. ;
  94. MX    DW    0
  95. MY    DW    500
  96. MZ    DW    -4000
  97. MPICH    DW    0
  98. MBANK    DW    0
  99. MHEAD    DW    0
  100. MSPEED    DW    0
  101. MPOWER    DW    0
  102. MFUEL    DW    0
  103. CCODE    DW    0
  104. PCTR    DW    0
  105. ;
  106. POSTSX0    DW    0
  107. POSTSY0    DW    0
  108. POSTSX1    DW    0
  109. POSTSY1    DW    0
  110. HIGHTS    DW    0
  111. POWSTK    DW    0
  112. ILS_HS    DW    0
  113. DIRSX    DW    0
  114. DIRSY    DW    0
  115. SPDS    DW    0
  116. ;
  117. Y3WORK    DB    512 DUP(?)
  118. DRWBUF    DB    4096 DUP(?)
  119. ERSBUF    DB    4096 DUP(?)
  120. ;
  121. MES_LS    DB    "失速しました。"
  122. SIZ_LS    EQU    $-MES_LS
  123. MES_HS    DB    "機の耐久速度をオーバーしました。"
  124. SIZ_HS    EQU    $-MES_HS
  125. MES_CO    DB    "コースアウトしました。"
  126. SIZ_CO    EQU    $-MES_CO
  127. MES_BP    DB    "機首から地面に突っ込みました。"
  128. SIZ_BP    EQU    $-MES_BP
  129. MES_SF    DB    "COMPLETE!"
  130. SIZ_SF    EQU    $-MES_SF
  131. MES_HR    DB    "Hit  RETURN(V1.0)"
  132. SIZ_HR    EQU    $-MES_HR
  133. MES_YM    DB    "S.Yamakawa  Presents"
  134. SIZ_YM    EQU    $-MES_YM
  135. ;
  136. DATA    ENDS
  137. ;
  138. ;
  139. CODE    SEGMENT    PUBLIC
  140. ;
  141. CLIPF    PROC
  142. ;
  143. ;    DS:[DI]   +2   +4   +6  +8  +10  +12  +14  +16
  144. ;         X1   Y1   X2   Y2  --  CPX1 CPY1 CPX2 CPY2
  145.     MOV    AX,[DI+10]
  146.     CMP    [DI  ],AX
  147.     JGE    CPF_0
  148.     CMP    [DI+4],AX
  149.     JGE    CPF_0
  150.     JMP    FAR PTR CPF_OUT
  151. ;
  152. CPF_0:    MOV    AX,[DI+14]
  153.     CMP    [DI  ],AX
  154.     JLE    CPF_1
  155.     CMP    [DI+4],AX
  156.     JLE    CPF_1
  157.     JMP    FAR PTR CPF_OUT
  158. ;
  159. CPF_1:    MOV    AX,[DI+12]
  160.     CMP    [DI+2],AX
  161.     JGE    CPF_2
  162.     CMP    [DI+6],AX
  163.     JGE    CPF_2
  164.     JMP    FAR PTR CPF_OUT
  165. ;
  166. CPF_2:    MOV    AX,[DI+16]
  167.     CMP    [DI+2],AX
  168.     JLE    CPF_3
  169.     CMP    [DI+6],AX
  170.     JLE    CPF_3
  171.     JMP    FAR PTR CPF_OUT
  172. ;
  173. ;    完全に画面外ではない
  174. ;
  175. ;
  176. ;    X1<CPX1?
  177. CPF_3:    MOV    BX,[DI+10]
  178.     CMP    [DI  ],BX
  179.     JGE    CP_X21
  180. ;CLIP    X1=CPX1
  181.     MOV    [DI+8],BX
  182.     $CLIPX
  183.     MOV    [DI  ],BX
  184.     MOV    [DI+2],AX
  185.     JMP    [CP_X21]
  186. ;
  187. ;    X2<CPX1?
  188. CP_X21:    MOV    BX,[DI+10]
  189.     CMP    [DI+4],BX
  190.     JGE    CP_X12
  191. ;CLIP    X2=CPX1
  192.     MOV    [DI+8],BX
  193.     $CLIPX
  194.     MOV    [DI+4],BX
  195.     MOV    [DI+6],AX
  196. ;
  197. ;    X1>CPX2?
  198. CP_X12:    MOV    BX,[DI+14]
  199.     CMP    [DI  ],BX
  200.     JLE    CP_X22
  201. ;CLIP    X1=CPX2
  202.     MOV    [DI+8],BX
  203.     $CLIPX
  204.     MOV    [DI  ],BX
  205.     MOV    [DI+2],AX
  206.     JMP    [CP_Y11]
  207. ;
  208. ;    X2>CPX2?
  209. CP_X22:    MOV    BX,[DI+14]
  210.     CMP    [DI+4],BX
  211.     JLE    CP_Y11
  212.     MOV    [DI+8],BX
  213.     $CLIPX
  214.     MOV    [DI+4],BX
  215.     MOV    [DI+6],AX
  216. ;
  217. ;    Y1<CPY1?
  218. CP_Y11:    MOV    BX,[DI+12]
  219.     CMP    [DI+2],BX
  220.     JGE    CP_Y21
  221.     MOV    [DI+8],BX
  222.     $CLIPY
  223.     MOV    [DI  ],AX
  224.     MOV    [DI+2],BX
  225.     JMP    [CP_Y22]
  226. ;
  227. ;    Y2<CPY1?
  228. CP_Y21:    MOV    BX,[DI+12]
  229.     CMP    [DI+6],BX
  230.     JGE    CP_Y12
  231.     MOV    [DI+8],BX
  232.     $CLIPY
  233.     MOV    [DI+4],AX
  234.     MOV    [DI+6],BX
  235. ;
  236. ;    Y1>CPY2?
  237. CP_Y12:    MOV    BX,[DI+16]
  238.     CMP    [DI+2],BX
  239.     JLE    CP_Y22
  240.     MOV    [DI+8],BX
  241.     $CLIPY
  242.     MOV    [DI  ],AX
  243.     MOV    [DI+2],BX
  244.     JMP    [CLP_EX]
  245. ;
  246. ;    Y2>CPY2?
  247. CP_Y22:    MOV    BX,[DI+16]
  248.     CMP    [DI+6],BX
  249.     JLE    CLP_EX
  250.     MOV    [DI+8],BX
  251.     $CLIPY
  252.     MOV    [DI+4],AX
  253.     MOV    [DI+6],BX
  254. ;
  255. ;    LAST CHECK
  256. CLP_EX:    MOV    AX,[DI+10]
  257.     CMP    [DI  ],AX
  258.     JL    CPF_OUT
  259.     CMP    [DI+4],AX
  260.     JL    CPF_OUT
  261.     MOV    AX,[DI+14]
  262.     CMP    [DI  ],AX
  263.     JG    CPF_OUT
  264.     CMP    [DI+4],AX
  265.     JG    CPF_OUT
  266. ;
  267.     MOV    AX,[DI+12]
  268.     CMP    [DI+2],AX
  269.     JL    CPF_OUT
  270.     CMP    [DI+6],AX
  271.     JL    CPF_OUT
  272.     MOV    AX,[DI+16]
  273.     CMP    [DI+2],AX
  274.     JG    CPF_OUT
  275.     CMP    [DI+6],AX
  276.     JG    CPF_OUT
  277.     RET
  278. ;
  279. CPF_OUT:MOV    AX,0
  280.     MOV    [DI  ],AX
  281.     MOV    [DI+2],AX
  282.     MOV    [DI+4],AX
  283.     MOV    [DI+6],AX
  284.     RET
  285. CLIPF    ENDP
  286. ;
  287. ;
  288. ;
  289. MAKEDSP    PROC
  290.     MOV    DI,OFFSET Y3WORK
  291.     $PALET    0,0
  292.     $PALET    1,9
  293.     $PALET    2,10
  294.     $PALET    3,11
  295.     $PALET    4,12
  296.     $PALET    5,13
  297.     $PALET    6,14
  298.     $PALET    7,15
  299.     $PALET    8,0
  300.     $PALET    9,9
  301.     $PALET    10,10
  302.     $PALET    11,11
  303.     $PALET    12,12
  304.     $PALET    13,13
  305.     $PALET    14,14
  306.     $PALET    15,15
  307. ;
  308.     MOV    AL,7
  309.     $GCOLOR
  310.     $PSET
  311.     BOX    SCRNX0,SCRNY0,SCRNX1,SCRNY1
  312.     BOX    RDX0,RDY0,RDX1,RDY1
  313.     BOX    POWX0,POWY0,POWX1,POWY1
  314.     BOX    POSTX0,POSTY0,POSTX1,POSTY1
  315.     BOX    SPDX0,SPDY0,SPDX1,SPDY1
  316.     LINEXE    SPDX0-4,SPDY1-SLOWEST-3,SPDX0  ,SPDY1-SLOWEST-3
  317.     LINEXE    SPDX1  ,SPDY1-SLOWEST-3,SPDX1+4,SPDY1-SLOWEST-3
  318. ;
  319.     MOV    BX,HIGHTY1
  320.     MOV    DX,HIGHTY1
  321. HIGHTL:    MOV    AX,HIGHTX
  322.     MOV    CX,HIGHTX+9
  323.     PUSH    BX
  324.     $LINE
  325.     POP    BX
  326.     MOV    DX,BX
  327. ;
  328.     MOV    AX,HIGHTX+20
  329.     MOV    CX,HIGHTX+29
  330.     PUSH    BX
  331.     $LINE
  332.     POP    BX
  333.     MOV    DX,BX
  334.     SUB    BX,HIGHTST*5
  335.     SUB    DX,HIGHTST*5
  336.     CMP    DX,HIGHTY0
  337.     JGE    HIGHTL
  338. ;
  339.     MOV    BX,HIGHTY1
  340.     MOV    DX,HIGHTY1
  341. HIGHT2:    MOV    AX,HIGHTX
  342.     MOV    CX,HIGHTX+4
  343.     PUSH    BX
  344.     $LINE
  345.     POP    BX
  346.     MOV    DX,BX
  347. ;
  348.     MOV    AX,HIGHTX+25
  349.     MOV    CX,HIGHTX+29
  350.     PUSH    BX
  351.     $LINE
  352.     POP    BX
  353.     MOV    DX,BX
  354.     SUB    BX,HIGHTST
  355.     SUB    DX,HIGHTST
  356.     CMP    DX,HIGHTY0
  357.     JGE    HIGHT2
  358. ;
  359. ;ILS_HORIZONTAL
  360.     LINEXE    ILSH_X           ,ILSH_Y,ILSH_X         ,ILSH_Y+9
  361.     LINEXE    ILSH_X+PORTX0*2  ,ILSH_Y,ILSH_X+PORTX0*2,ILSH_Y+4
  362.     LINEXE    ILSH_X+PORTX1*2  ,ILSH_Y,ILSH_X+PORTX1*2,ILSH_Y+4
  363.     BOX    ILSH_X+PORTX0*4-5,ILSH_Y,ILSH_X+PORTX0*4,ILSH_Y+9
  364.     BOX    ILSH_X+PORTX1*4+5,ILSH_Y,ILSH_X+PORTX1*4,ILSH_Y+9
  365. ;
  366.     MOV    BX,0
  367. DIRL:    MOV    AX,DIRR
  368.     $COS
  369.     MOV    CX,AX
  370.     MOV    AX,DIRR
  371.     $SIN
  372.     MOV    DX,AX
  373.     PUSH    BX
  374.     ADD    CX,DIRCX
  375.     ADD    DX,DIRCY
  376.     $POINT
  377.     POP    BX
  378.     INC    BX
  379.     CMP    BX,1024
  380.     JNE    DIRL
  381. ;
  382.     RET
  383. MAKEDSP    ENDP
  384. ;
  385. ;
  386. ;
  387. DRAWEXE    PROC
  388.     MOV    SI,OFFSET EARTH
  389.     MOV    DI,OFFSET DRWBUF
  390.     $MKFRM    4000H+32*3+31
  391.     MOV    DI,OFFSET ERSBUF
  392.     $MKFRM    4000H+32*3+31
  393. ;
  394.     MOV    DI,OFFSET Y3WORK
  395.     $PSET
  396.     ;
  397.     MOV    AX,1
  398.     PUSH    AX
  399. DEX_0:    MOV    DI,OFFSET Y3WORK
  400. ;
  401.     MOV    AX,[MHEAD]
  402.     NEG    AX
  403.     MOV    [DI+6],AX
  404.     MOV    AX,[MPICH]
  405.     NEG    AX
  406.     MOV    [DI+8],AX
  407.     MOV    AX,[MBANK]
  408.     NEG    AX
  409.     MOV    [DI+10],AX
  410. ;
  411. DEX_1:    MOV    DI,OFFSET Y3WORK
  412.     MOV    AX,[SI]
  413.     SUB    AX,[MX]
  414.     MOV    [DI],AX
  415. ;
  416.     MOV    AX,[MY]
  417.     NEG    AX
  418.     MOV    [DI+2],AX
  419. ;
  420.     MOV    AX,[SI+2]
  421.     SUB    AX,[MZ]
  422.     MOV    [DI+4],AX
  423.     $3DROLL
  424.     MOV    AX,[DI+4]
  425.     CMP    AX,1
  426.     JG    DEX_1_2
  427.     JMP    FAR PTR DEX_OUT
  428. ;
  429. DEX_1_2:MOV    AX,[DI]
  430.     MOV    DX,100
  431.     IMUL    DX
  432.     MOV    BX,DX
  433.     AND    BX,BX
  434.     JNS    DEX122
  435.     NEG    BX
  436. DEX122:    SHL    BX,1
  437.     SHL    BX,1
  438.     CMP    BX,[DI+4]
  439.     JL    DEX_1_3
  440.     JMP    [DEX_OUT]
  441. ;
  442. DEX_1_3:MOV    BX,[DI+4]
  443.     IDIV    BX
  444.     MOV    CX,AX
  445. ;
  446.     MOV    AX,[DI+2]
  447.     MOV    DX,100
  448.     IMUL    DX
  449.     MOV    BX,DX
  450.     AND    BX,BX
  451.     JNS    DEX132
  452.     NEG    BX
  453. DEX132:    SHL    BX,1
  454.     SHL    BX,1
  455.     CMP    BX,[DI+4]
  456.     JL    DEX_1_4
  457.     JMP    [DEX_OUT]
  458. ;
  459. DEX_1_4:MOV    BX,[DI+4]
  460.     IDIV    BX
  461.     MOV    DX,AX
  462. ;
  463.     ADD    CX,CENTX
  464.     NEG    DX
  465.     ADD    DX,CENTY
  466. ;
  467.     CMP    CX,SCRNX0
  468.     JLE    DEX_OUT
  469.     CMP    CX,SCRNX1
  470.     JGE    DEX_OUT
  471.     CMP    DX,SCRNY0
  472.     JLE    DEX_OUT
  473.     CMP    DX,SCRNY1
  474.     JGE    DEX_OUT
  475. ;
  476.     MOV    DI,OFFSET DRWBUF
  477.     $ADFRM
  478.     MOV    DI,OFFSET ERSBUF
  479.     $ADFRM
  480. ;
  481. DEX_OUT:ADD    SI,4
  482.     MOV    AX,[SI]
  483.     CMP    AX,7FFFH
  484.     JE    DEX_O_2
  485.     JMP    [DEX_1]
  486. ;
  487. DEX_O_2:ADD    SI,2
  488.     POP    AX
  489.     MOV    DI,OFFSET Y3WORK
  490.     $GCOLOR
  491.     MOV    DI,OFFSET DRWBUF
  492.     $GDRAW
  493.     $MKFRM    4000H+3*32+31
  494.     INC    AX
  495.     CMP    AX,7
  496.     JE    DEX_END
  497.     PUSH    AX
  498.     JMP    [DEX_0]
  499. ;
  500. DEX_END:RET
  501. DRAWEXE    ENDP
  502. ;
  503. GOFWRD    PROC
  504.     PUSH    AX
  505.     PUSH    BX
  506.     PUSH    DX
  507. ;
  508.     MOV    AX,[MSPEED]
  509.     MOV    BX,[MPICH]
  510.     $COS
  511.     MOV    BX,[MHEAD]
  512.     $SIN
  513.     SUB    [MX],AX
  514. ;
  515.     MOV    AX,[MSPEED]
  516.     MOV    BX,[MPICH]
  517.     $COS
  518.     MOV    BX,[MHEAD]
  519.     $COS
  520.     ADD    [MZ],AX
  521. ;
  522.     MOV    AX,[MSPEED]
  523.     MOV    BX,[MPICH]
  524.     $SIN
  525.     ADD    [MY],AX
  526.     CMP    [MY],LOWEST
  527.     JG    GF_0
  528.     MOV    [MY],LOWEST
  529. ;
  530. GF_0:    CMP    [MY],HIGHEST
  531.     JL    GF_1
  532.     MOV    [MY],HIGHEST
  533. ;
  534. GF_1:    POP    DX
  535.     POP    BX
  536.     POP    AX
  537.     RET
  538. GOFWRD    ENDP    
  539. ;
  540. CENTLIN    PROC
  541.     MOV    DI,OFFSET Y3WORK
  542.     $PSET
  543.     MOV    AL,7
  544.     $GCOLOR
  545.     LINEXE    CENTX-10,CENTY  ,CENTX-5,CENTY
  546.     LINEXE    CENTX+10,CENTY  ,CENTX+5,CENTY
  547.     LINEXE    CENTX   ,CENTY-8,CENTX  ,CENTY-5
  548.     LINEXE    CENTX   ,CENTY+8,CENTX  ,CENTY+5
  549.     RET
  550. CENTLIN    ENDP
  551. ;
  552. ;
  553. ;
  554. RADER    PROC
  555.     PUSH    AX
  556.     PUSH    CX
  557.     PUSH    DX
  558.     PUSH    DI
  559.     MOV    DI,OFFSET Y3WORK
  560.     MOV    AL,1
  561.     $GCOLOR    
  562.     LINEXE    RDX0+1,(RDY0+RDY1)/2,RDX1-1,(RDY0+RDY1)/2
  563.     LINEXE    (RDX0+RDX1)/2,RDY0+1,(RDX0+RDX1)/2,RDY1-1
  564.     MOV    AL,6
  565.     $GCOLOR
  566.     MOV    AX,[MX]
  567.     CWD
  568.     MOV    DI,273
  569.     IDIV    DI
  570.     MOV    CX,AX
  571.     MOV    AX,[MZ]
  572.     CWD
  573.     MOV    DI,-273
  574.     IDIV    DI
  575.     MOV    DX,AX
  576.     ADD    CX,(RDX0+RDX1)/2
  577.     ADD    DX,(RDY0+RDY1)/2
  578.     CMP    CX,RDX0
  579.     JLE    RDR_EX
  580.     CMP    CX,RDX1
  581.     JGE    RDR_EX
  582.     CMP    DX,RDY0
  583.     JLE    RDR_EX
  584.     CMP    DX,RDY1
  585.     JGE    RDR_EX
  586.     MOV    DI,OFFSET ERSBUF
  587.     $ADFRM
  588.     MOV    DI,OFFSET Y3WORK
  589.     $POINT
  590. RDR_EX:    POP    DI
  591.     POP    DX
  592.     POP    CX
  593.     POP    AX
  594.     RET
  595. RADER    ENDP
  596. ;
  597. ;
  598. ;
  599. HIGHTM    PROC
  600.     MOV    DI,OFFSET Y3WORK
  601.     $PRESET
  602.     MOV    BX,[HIGHTS]
  603.     MOV    DX,[HIGHTS]
  604.     MOV    AX,HIGHTX+10
  605.     MOV    CX,HIGHTX+19
  606.     $LINE
  607.     $PSET
  608.     MOV    AL,2
  609.     $GCOLOR
  610. ;
  611.     MOV    DX,[MY]
  612.     SUB    DX,LOWEST
  613.     SHR    DX,1
  614.     NEG    DX
  615.     ADD    DX,HIGHTY1
  616.     CMP    DX,HIGHTY0
  617.     JGE    HIGHTE
  618.     MOV    DX,HIGHTY0
  619. HIGHTE:    MOV    [HIGHTS],DX
  620.     MOV    BX,DX
  621.     MOV    AX,HIGHTX+10
  622.     MOV    CX,HIGHTX+19
  623.     $LINE
  624.     RET
  625. HIGHTM    ENDP
  626. ;
  627. ;
  628. ;
  629. POWMTR    PROC
  630.     MOV    DI,OFFSET Y3WORK
  631.     MOV    SI,[MPOWER]
  632.     SUB    SI,[POWSTK]
  633.     JNE    PWMTR0
  634. ;
  635.     RET
  636. ;
  637. PWMTR0:    JG    PWUP0
  638. PWDWN0:    $PRESET
  639.     MOV    BX,[MPOWER]
  640.     INC    BX
  641.     SHL    BX,1
  642.     NEG    BX
  643.     ADD    BX,POWY1
  644.     MOV    DX,BX
  645. PWDWN1:    MOV    AX,POWX0+1
  646.     MOV    CX,POWX1-1    
  647.     PUSH    BX
  648.     PUSH    SI
  649.     $LINE
  650.     POP    SI
  651.     POP    BX
  652.     SUB    BX,2
  653.     MOV    DX,BX
  654. ;    
  655.     INC    SI
  656.     JNE    PWDWN1
  657.     MOV    AX,[MPOWER]
  658.     MOV    [POWSTK],AX
  659.     RET
  660. POWMTR    ENDP
  661. ;
  662. PWUP0:    $PSET
  663.     MOV    AL,2
  664.     $GCOLOR
  665.     MOV    BX,[MPOWER]
  666.     SHL    BX,1
  667.     NEG    BX
  668.     ADD    BX,POWY1
  669.     MOV    DX,BX
  670. PWUP1:    MOV    AX,POWX0+1
  671.     MOV    CX,POWX1-1
  672.     PUSH    BX
  673.     PUSH    SI
  674.     $LINE
  675.     POP    SI
  676.     POP    BX
  677.     ADD    BX,2
  678.     MOV    DX,BX
  679.     DEC    SI
  680.     JNE    PWUP1
  681.     MOV    AX,[MPOWER]
  682.     MOV    [POWSTK],AX
  683.     RET
  684. ;
  685. ;
  686. ;
  687. POSTURE    PROC
  688.     MOV    DI,OFFSET Y3WORK
  689. ;
  690.     MOV    BX,[MPICH]
  691.     AND    BX,1023
  692. ;
  693.     CMP    BX,768
  694.     JL    POST0
  695.     SUB    BX,1024
  696.     JMP    POST1
  697. ;
  698. POST0:    CMP    BX,256
  699.     JL    POST1
  700.     SUB    BX,512
  701. ;
  702. POST1:    NEG    BX
  703.     MOV    [DI+2],BX
  704.     MOV    [DI+6],BX
  705. ;
  706.     MOV    BX,[MBANK]
  707.     NEG    BX
  708.     MOV    CX,400
  709.     MOV    DX,[DI+2]
  710.     $ROLL
  711.     MOV    [DI  ],CX
  712.     NEG    DX
  713.     MOV    [DI+2],DX
  714. ;
  715.     MOV    BX,[MBANK]
  716.     NEG    BX
  717.     MOV    CX,-400
  718.     MOV    DX,[DI+6]
  719.     $ROLL
  720.     MOV    [DI+4],CX
  721.     NEG    DX
  722.     MOV    [DI+6],DX
  723. ;
  724.     ADD    WORD PTR [DI  ],POSTCX
  725.     ADD    WORD PTR [DI+2],POSTCY
  726.     ADD    WORD PTR [DI+4],POSTCX
  727.     ADD    WORD PTR [DI+6],POSTCY
  728. ;
  729.     MOV    WORD PTR [DI+10],POSTX0+1
  730.     MOV    WORD PTR [DI+12],POSTY0+1
  731.     MOV    WORD PTR [DI+14],POSTX1-1
  732.     MOV    WORD PTR [DI+16],POSTY1-1
  733. ;
  734.     CALL    [CLIPF]
  735. ;
  736.     ADD    DI,8
  737.     $PRESET
  738.     MOV    AX,[POSTSX0]
  739.     MOV    BX,[POSTSY0]
  740.     MOV    CX,[POSTSX1]
  741.     MOV    DX,[POSTSY1]
  742.     $LINE
  743.     MOV    AL,7
  744.     $GCOLOR
  745.     $PSET
  746.     LINEXE    (POSTCX+POSTX0)/2,POSTCY,(POSTCX+POSTX1)/2,POSTCY
  747.     SUB    DI,8
  748. ;
  749.     MOV    AX,[DI  ]
  750.     MOV    BX,[DI+2]
  751.     MOV    CX,[DI+4]
  752.     MOV    DX,[DI+6]
  753.     MOV    [POSTSX0],AX
  754.     MOV    [POSTSY0],BX
  755.     MOV    [POSTSX1],CX
  756.     MOV    [POSTSY1],DX
  757.     $LINE
  758. ;
  759.     RET
  760. POSTURE    ENDP
  761. ;
  762. ;
  763. ;
  764. ILS_HOR    PROC
  765.     MOV    DI,OFFSET Y3WORK
  766.     $PRESET
  767.     MOV    AX,[ILS_HS]
  768.     MOV    BX,ILSH_Y-1
  769.     MOV    CX,[ILS_HS]
  770.     SUB    CX,5
  771.     MOV    DX,ILSH_Y-6
  772.     $LINE
  773.     MOV    AX,[ILS_HS]
  774.     MOV    BX,ILSH_Y-1
  775.     MOV    CX,[ILS_HS]
  776.     ADD    CX,5
  777.     MOV    DX,ILSH_Y-6
  778.     $LINE
  779.     MOV    AL,2
  780.     $GCOLOR
  781. ;
  782.     MOV    AX,(PORTX0+PORTX1)/2
  783.     SUB    AX,[MX]
  784.     CMP    AX,PORTX0*2
  785.     JG    ILS_H0
  786.     MOV    AX,PORTX0*2
  787. ILS_H0:    CMP    AX,PORTX1*2
  788.     JL    ILS_H1
  789.     MOV    AX,PORTX1*2
  790. ;
  791. ILS_H1:    MOV    BX,[MZ]
  792.     AND    BX,BX
  793.     JS    ILS_H2
  794.     NEG    AX
  795. ILS_H2:    MOV    BX,2
  796.     IMUL    BX
  797.     ADD    AX,ILSH_X
  798.     MOV    [ILS_HS],AX
  799. ;
  800.     $PSET
  801.     MOV    AX,[ILS_HS]
  802.     MOV    BX,ILSH_Y-1
  803.     MOV    CX,[ILS_HS]
  804.     SUB    CX,5
  805.     MOV    DX,ILSH_Y-6
  806.     $LINE
  807.     MOV    AX,[ILS_HS]
  808.     MOV    BX,ILSH_Y-1
  809.     MOV    CX,[ILS_HS]
  810.     ADD    CX,5
  811.     MOV    DX,ILSH_Y-6
  812.     $LINE
  813. ;
  814.     RET
  815. ILS_HOR    ENDP
  816. ;
  817. ;
  818. ;
  819. HEADANG    PROC
  820.     MOV    DI,OFFSET Y3WORK
  821.     $PRESET
  822.     MOV    AX,DIRCX
  823.     MOV    BX,DIRCY
  824.     MOV    CX,[DIRSX]
  825.     MOV    DX,[DIRSY]
  826.     $LINE
  827.     MOV    AL,6
  828.     $GCOLOR
  829.     $PSET
  830. ;
  831.     MOV    BX,[MHEAD]
  832.     ADD    BX,256
  833.     MOV    AX,DIRR-5
  834.     $COS
  835.     MOV    CX,AX
  836.     MOV    BX,[MHEAD]
  837.     ADD    BX,256
  838.     MOV    AX,DIRR-5
  839.     $SIN
  840.     MOV    DX,AX
  841. ;
  842.     ADD    CX,DIRCX
  843.     NEG    DX
  844.     ADD    DX,DIRCY
  845.     MOV    [DIRSX],CX
  846.     MOV    [DIRSY],DX
  847. ;
  848.     MOV    AX,DIRCX
  849.     MOV    BX,DIRCY
  850.     $LINE
  851.     RET
  852. HEADANG    ENDP
  853. ;
  854. ;
  855. ;
  856. SPEEDM    PROC
  857.     MOV    DI,OFFSET Y3WORK
  858.     MOV    AL,2
  859.     $GCOLOR
  860.     CMP    WORD PTR [MSPEED],TOSPD
  861.     JL    SPDM2
  862.     MOV    AL,6
  863.     $GCOLOR
  864. SPDM2:    $PRESET
  865.     MOV    AX,SPDX0+1
  866.     MOV    BX,[SPDS]
  867.     MOV    CX,SPDX1-1
  868.     MOV    DX,[SPDS]
  869.     $LINE
  870.     $PSET
  871.     MOV    AX,SPDX0+1
  872.     MOV    CX,SPDX1-1
  873.     MOV    BX,SPDY1-1
  874.     SUB    BX,[MSPEED]
  875.     MOV    DX,BX
  876.     MOV    [SPDS],BX
  877.     $LINE
  878.     RET
  879. SPEEDM    ENDP
  880. ;
  881. ;
  882. ;
  883. RADDER    PROC
  884.     MOV    BX,[MBANK]
  885.     AND    BX,1023
  886.     JNE    RAD0
  887.     RET
  888. ;
  889. RAD0:
  890. ; -6<BX<6 not care
  891.     CMP    BX,1018        ;1018 = -6
  892.     JGE    RAD_EX
  893.     CMP    BX,6
  894.     JLE    RAD_EX
  895. ; 506<BX<518 not care
  896.     CMP    BX,506
  897.     JL    RAD1
  898.     CMP    BX,518
  899.     JLE    RAD_EX
  900. ;
  901. RAD1:
  902.     MOV    AX,RADSPC
  903.     $SIN
  904.     ADD    [MHEAD],AX
  905. ;
  906. RAD_EX:
  907.     RET
  908. RADDER    ENDP
  909. ;
  910. ;
  911. ;
  912. PULLUP    PROC
  913.     MOV    AX,ELVSPC
  914.     MOV    BX,[MBANK]
  915.     $COS
  916.     ADD    [MPICH],AX
  917.     MOV    AX,ELVSPC
  918.     MOV    BX,[MBANK]
  919.     $SIN
  920.     ADD    [MHEAD],AX
  921. ;  256<MPICH<768 must be corrected
  922.     AND    [MPICH],1023
  923.     CMP    [MPICH],256
  924.     JL    PLUP_EX
  925.     CMP    [MPICH],768
  926.     JG    PLUP_EX
  927. ;
  928.     SUB    [MPICH],512
  929.     NEG    [MPICH]
  930.     AND    [MPICH],1023
  931.     ADD    [MBANK],512
  932.     AND    [MBANK],1023
  933. PLUP_EX:
  934.     RET
  935. PULLUP    ENDP
  936. ;
  937. PULLDWN    PROC    
  938.     MOV    AX,ELVSPC
  939.     MOV    BX,[MBANK]
  940.     $COS
  941.     SUB    [MPICH],AX
  942.     MOV    AX,ELVSPC
  943.     MOV    BX,[MBANK]
  944.     $SIN
  945.     SUB    [MHEAD],AX
  946. ;  256<MPICH<768 must be corrected
  947.     AND    [MPICH],1023
  948.     CMP    [MPICH],256
  949.     JL    PLDN_EX
  950.     CMP    [MPICH],768
  951.     JG    PLDN_EX
  952. ;
  953.     SUB    [MPICH],512
  954.     NEG    [MPICH]
  955.     AND    [MPICH],1023
  956.     ADD    [MBANK],512
  957.     AND    [MBANK],1023
  958. PLDN_EX:
  959.     RET
  960. PULLDWN    ENDP
  961. ;
  962. KEYSCAN    PROC
  963.     MOV    DI,OFFSET Y3WORK
  964.     $K_READ
  965. ;
  966.     $K_CHK    4FH    ;←
  967.     JE    KS_2
  968.     MOV    AX,[CCODE]
  969.     AND    AX,LANDING
  970.     JNE    KS_1L
  971.     ADD    [MBANK],AILSPC
  972.     JMP    KS_2
  973. KS_1L:    ADD    [MHEAD],AILSPC
  974. KS_2:    $K_CHK    51H    ;→
  975.     JE    KS_3
  976.     MOV    AX,[CCODE]
  977.     AND    AX,LANDING
  978.     JNE    KS_2L
  979.     SUB    [MBANK],AILSPC
  980.     JMP    KS_3
  981. KS_2L:    SUB    [MHEAD],AILSPC
  982. KS_3:    $K_CHK    4DH
  983.     JE    KS_4
  984.     CALL    [PULLDWN]
  985. KS_4:    $K_CHK    50H
  986.     JE    KS_7
  987.     CALL    [PULLUP]
  988. KS_7:    $K_CHK    11H
  989.     JE    KS_8
  990.     ADD    [MPOWER],DPOW
  991.     CMP    [MPOWER],POWMAX
  992.     JL    KS_8
  993.     MOV    [MPOWER],POWMAX
  994. KS_8:    $K_CHK    1EH
  995.     JE    KS_9
  996.     SUB    [MPOWER],DPOW
  997.     JNS    KS_9
  998.     MOV    [MPOWER],0
  999. KS_9:    $K_CHK    01H
  1000.     JE    KS_10
  1001.     MOV    AH,4CH
  1002.     INT    21H
  1003. KS_10:    $K_BUFC
  1004.     RET
  1005. KEYSCAN    ENDP
  1006. ;
  1007. ;
  1008. ;
  1009. POWSPD    PROC
  1010.     MOV    AX,[MPOWER]
  1011.     CMP    AX,20
  1012.     JG    PS1
  1013.     SUB    WORD PTR [MSPEED],DSPD
  1014.     JMP    PSX
  1015. ;
  1016. PS1:    CMP    AX,40
  1017.     JG    PS2
  1018.     JMP    PSX
  1019. ;
  1020. PS2:    CMP    AX,45
  1021.     JG    PS3
  1022.     ADD    WORD PTR [MSPEED],DSPD
  1023.     JMP    PSX
  1024. ;
  1025. PS3:    CMP    AX,50
  1026.     JG    PS4
  1027.     ADD    WORD PTR [MSPEED],DSPD*2
  1028.     JMP    PSX
  1029. ;
  1030. PS4:    ADD    WORD PTR [MSPEED],DSPD*3
  1031. ;
  1032. PSX:    CMP    WORD PTR [MSPEED],0
  1033.     JG    PSY
  1034.     MOV    WORD PTR [MSPEED],0
  1035. ;
  1036. PSY:    CMP    WORD PTR [MSPEED],FASTEST
  1037.     JL    C_LAND
  1038.     MOV    WORD PTR [MSPEED],FASTEST
  1039. POWSPD    ENDP
  1040. ;
  1041. ;
  1042. ;
  1043. CONDITN    PROC
  1044. C_LAND:    MOV    AX,[CCODE]
  1045.     AND    AX,LANDING
  1046.     JNE    C_LAN0
  1047.     JMP    C_PRUN
  1048. ;
  1049. C_LAN0:    CMP    [MY],LOWEST+LBOUND
  1050.     JLE    C_LN01
  1051.     JMP    C_PRUN
  1052. ;
  1053. C_LN01:    MOV    [MY],LOWEST
  1054.     MOV    AX,[MSPEED]
  1055.     AND    AX,AX
  1056.     JNE    C_LAN1
  1057. ;
  1058.     MOV    WORD PTR [CCODE],ABOUT
  1059.     RET
  1060. ;
  1061. ;
  1062. C_LAN1:    CMP    WORD PTR [MSPEED],TDSPD
  1063.     JG    C_LAN2
  1064.     SUB    WORD PTR [MPICH],4
  1065. C_LAN2:    CMP    WORD PTR [MPICH],0
  1066.     JG    C_LAN3
  1067.     MOV    WORD PTR [MPICH],0
  1068. C_LAN3:    MOV    WORD PTR [MBANK],0
  1069. ;
  1070.     CMP    WORD PTR [MX],PORTX0
  1071.     JL    C_LOUT
  1072.     CMP    WORD PTR [MX],PORTX1
  1073.     JG    C_LOUT
  1074.     CMP    WORD PTR [MZ],PORTZ0
  1075.     JL    C_LOUT
  1076.     CMP    WORD PTR [MZ],PORTZ1
  1077.     JG    C_LOUT
  1078.     RET 
  1079. ;
  1080. C_LOUT:    OR    WORD PTR [CCODE],ABOUT
  1081.     OR    WORD PTR [CCODE],COUT
  1082.     RET
  1083. ;
  1084. ;
  1085. C_PRUN:    MOV    AX,[CCODE]
  1086.     AND    AX,TAKEOFF
  1087.     JE    C_PR0
  1088.     JMP    C_FLT
  1089. ;
  1090. C_PR0:    CMP    [MY],LOWEST
  1091.     JG    C_PR2
  1092. ;
  1093.     JMP    C_LAN1    ;COURSE OUT CHECK
  1094. ;
  1095. C_PR2:    CMP    WORD PTR [MSPEED],TOSPD
  1096.     JL    C_LOW
  1097.     OR    WORD PTR [CCODE],TAKEOFF
  1098.     MOV    AX,NOT LANDING
  1099.     AND    WORD PTR [CCODE],AX
  1100.     RET
  1101. ;
  1102. C_LOW:    OR    WORD PTR [CCODE],ABOUT
  1103.     OR    WORD PTR [CCODE],LOWSPD
  1104.     RET
  1105. ;
  1106. C_FLT:    CMP    WORD PTR [MY],LOWEST
  1107.     JG    C_FLT1
  1108.     CMP    WORD PTR [MPICH],0
  1109.     JL    C_CRSH
  1110.     OR    WORD PTR [CCODE],LANDING
  1111.     MOV    AX,NOT TAKEOFF
  1112.     AND    WORD PTR [CCODE],AX
  1113.     RET
  1114. ;
  1115. C_CRSH:    OR    WORD PTR [CCODE],ABOUT
  1116.     OR    WORD PTR [CCODE],BADPICH
  1117.     RET
  1118. ;
  1119. ;
  1120. C_FLT1:    CMP    WORD PTR [MSPEED],SLOWEST
  1121.     JG    C_FLT2
  1122.     OR    [CCODE],ABOUT
  1123.     OR    [CCODE],LOWSPD
  1124.     RET
  1125. ;
  1126. C_FLT2:    CMP    [MSPEED],DWNSPD
  1127.     JG    C_FLT3
  1128.     SUB    [MY],3
  1129.     JG    C_FLT3
  1130.     MOV    [MY],LOWEST
  1131. C_FLT3:    RET
  1132. ;
  1133.     RET
  1134. CONDITN    ENDP
  1135. ;
  1136. ;
  1137. ;
  1138. WAITR    PROC
  1139.     MOV    DI,OFFSET Y3WORK
  1140. WAITR0:    $K_READ
  1141.     $K_CHK    1DH
  1142.     JE    WAITR0
  1143.     RET
  1144. WAITR    ENDP
  1145. ;
  1146. ;
  1147. ;
  1148. ENTRY    PROC
  1149.     MOV    AX,DATA
  1150.     MOV    DS,AX
  1151. ;
  1152.     MOV    AH,02H
  1153.     MOV    DL,12
  1154.     INT    21H
  1155. ;
  1156. INITALL:MOV    DI,OFFSET Y3WORK
  1157.     $C_INIT
  1158.     $GBINIT
  1159.     $GCLS
  1160.     $K_INIT
  1161.     $C_COFF
  1162.     $K_COFF
  1163. ;    
  1164.     CALL    [MAKEDSP]
  1165. ;    INITIALIZE
  1166.     MOV    WORD PTR [POWSTK],0
  1167.     MOV    WORD PTR [MPOWER],0
  1168.     MOV    WORD PTR [MSPEED],0
  1169.     MOV    WORD PTR [ILS_HS],ILSH_X
  1170.     MOV    WORD PTR [DIRSX],DIRCX
  1171.     MOV    WORD PTR [DIRSY],DIRCY
  1172.     MOV    WORD PTR [SPDS],SPDY1-1
  1173.     MOV    WORD PTR [CCODE],0
  1174.     MOV    WORD PTR [MX],0
  1175.     MOV    WORD PTR [MZ],-750
  1176.     MOV    WORD PTR [MY],LOWEST
  1177.     MOV    WORD PTR [MHEAD],0
  1178.     MOV    WORD PTR [MPICH],0
  1179.     MOV    WORD PTR [MBANK],0
  1180.     CALL    [DRAWEXE]
  1181. ;
  1182.     $LOCATE 40-SIZ_HR/2,7
  1183.     MOV    DI,OFFSET MES_HR
  1184.     MOV    CX,SIZ_HR
  1185.     $PRINT
  1186.     $LOCATE    40-SIZ_YM/2,5
  1187.     MOV    DI,OFFSET MES_YM
  1188.     MOV    CX,SIZ_YM
  1189.     $PRINT
  1190.     CALL    [WAITR]
  1191.     $C_CLS
  1192. ;
  1193. MLOOP:    CMP    WORD PTR [MY],LOWEST
  1194.     JGE    MLP2
  1195.     MOV    WORD PTR [MY],LOWEST
  1196. MLP2:    CALL    [DRAWEXE]
  1197. ;
  1198.     CALL    [KEYSCAN]
  1199. ;
  1200.     CALL    [RADER]
  1201.     CALL    [POWMTR]
  1202. ;
  1203.     CALL    [KEYSCAN]
  1204. ;
  1205.     CALL    [POSTURE]
  1206.     CALL    [HIGHTM]
  1207.     CALL    [ILS_HOR]
  1208.     CALL    [HEADANG]
  1209. ;
  1210.     CALL    [KEYSCAN]
  1211. ;
  1212.     CALL    [SPEEDM]
  1213.     CALL    [RADDER]
  1214.     CALL    [GOFWRD]
  1215.     CALL    [CONDITN]
  1216. ;
  1217.     INC    WORD PTR [PCTR]
  1218.     MOV    AX,[PCTR]
  1219.     AND    AX,3
  1220.     JNE    PSCHK
  1221.     CALL    [POWSPD]
  1222. PSCHK:    CALL    [KEYSCAN]    
  1223. ;
  1224.     MOV    AX,[CCODE]
  1225.     AND    AX,ABOUT
  1226.     JNE    MLOUT
  1227. ;
  1228.     MOV    DI,OFFSET Y3WORK
  1229.     $PRESET
  1230.     MOV    DI,OFFSET ERSBUF
  1231.     $GDRAW
  1232.     MOV    DI,OFFSET Y3WORK
  1233.     CALL    [CENTLIN]
  1234. ;
  1235.     JMP    [MLOOP]
  1236. ;
  1237. MLOUT:    MOV    AX,[CCODE]
  1238.     AND    AX,LOWSPD
  1239.     JE    MLOUT2
  1240.     $LOCATE    40-SIZ_LS/2,8
  1241.     MOV    DI,OFFSET MES_LS
  1242.     MOV    CX,SIZ_LS
  1243.     $PRINT
  1244.     CALL    [WAITR]
  1245.     JMP    [INITALL]
  1246. MLOUT2:    MOV    AX,[CCODE]
  1247.     AND    AX,HISPD
  1248.     JE    MLOUT3
  1249.     $LOCATE    40-SIZ_HS/2,8
  1250.     MOV    DI,OFFSET MES_HS
  1251.     MOV    CX,SIZ_HS
  1252.     $PRINT
  1253.     CALL    [WAITR]
  1254.     JMP    [INITALL]
  1255. MLOUT3:    MOV    AX,[CCODE]
  1256.     AND    AX,BADPICH
  1257.     JE    MLOUT4
  1258.     $LOCATE    40-SIZ_BP/2,8
  1259.     MOV    DI,OFFSET MES_BP
  1260.     MOV    CX,SIZ_BP
  1261.     $PRINT
  1262.     CALL    [WAITR]
  1263.     JMP    [INITALL]
  1264. MLOUT4:    MOV    AX,[CCODE]
  1265.     AND    AX,COUT
  1266.     JE    MLOUT5
  1267.     $LOCATE    40-SIZ_CO/2,8
  1268.     MOV    DI,OFFSET MES_CO
  1269.     MOV    CX,SIZ_CO
  1270.     $PRINT
  1271.     CALL    [WAITR]
  1272.     JMP    [INITALL]
  1273. MLOUT5:    $LOCATE    40-SIZ_SF/2,8
  1274.     MOV    DI,OFFSET MES_SF
  1275.     MOV    CX,SIZ_SF
  1276.     $PRINT
  1277.     CALL    [WAITR]
  1278.     JMP    [INITALL]
  1279. ;
  1280. ;
  1281. ENTRY    ENDP
  1282. ;
  1283. ;
  1284. CODE    ENDS
  1285. ;
  1286. ;
  1287. ;
  1288. STACK    SEGMENT    STACK
  1289.     DW    2048 DUP(?)
  1290. STACK    ENDS
  1291. ;
  1292.     END    ENTRY
  1293.